import Utility.Tmp
import Utility.Env
import Utility.SshConfig
+import qualified Utility.FileIO as F
#ifdef darwin_HOST_OS
import Utility.OSX
(kdeDesktopFile actions)
where
genNautilusScript scriptdir action =
- installscript (scriptdir </> scriptname action) $ unlines
+ installscript (toRawFilePath (scriptdir </> scriptname action)) $ unlines
[ shebang
, autoaddedcomment
, "exec " ++ program ++ " " ++ action ++ " --notify-start --notify-finish -- \"$@\""
]
scriptname action = "git-annex " ++ action
installscript f c = whenM (safetoinstallscript f) $ do
- writeFile f c
- modifyFileMode (toRawFilePath f) $ addModes [ownerExecuteMode]
+ writeFile (fromRawFilePath f) c
+ modifyFileMode f $ addModes [ownerExecuteMode]
safetoinstallscript f = catchDefaultIO True $
- elem autoaddedcomment . lines <$> readFileStrict f
+ elem (encodeBS autoaddedcomment) . fileLines'
+ <$> F.readFile' (toOsPath f)
autoaddedcomment = "# " ++ autoaddedmsg ++ " (To disable, chmod 600 this file.)"
autoaddedmsg = "Automatically added by git-annex, do not edit."
import Git.Remote
import Utility.SshHost
import Utility.Process.Transcript
+import qualified Utility.FileIO as F
import Data.Text (Text)
import qualified Data.Text as T
removeAuthorizedKeys gitannexshellonly dir pubkey = do
let keyline = authorizedKeysLine gitannexshellonly dir pubkey
sshdir <- sshDir
- let keyfile = sshdir </> "authorized_keys"
- tryWhenExists (lines <$> readFileStrict keyfile) >>= \case
- Just ls -> viaTmp writeSshConfig (toOsPath (toRawFilePath keyfile)) $
+ let keyfile = toOsPath $ toRawFilePath $ sshdir </> "authorized_keys"
+ tryWhenExists (map decodeBS . fileLines' <$> F.readFile' keyfile) >>= \case
+ Just ls -> viaTmp writeSshConfig keyfile $
unlines $ filter (/= keyline) ls
Nothing -> noop
import Config
import Utility.Directory.Create
import Annex.Version
+import qualified Utility.FileIO as F
import qualified System.FilePath.ByteString as P
-- git-annex does not commit that.
deconfigureSmudgeFilter :: Annex ()
deconfigureSmudgeFilter = do
- lf <- fromRawFilePath <$> Annex.fromRepo Git.attributesLocal
- ls <- liftIO $ catchDefaultIO [] $ lines <$> readFileStrict lf
- liftIO $ writeFile lf $ unlines $
+ lf <- Annex.fromRepo Git.attributesLocal
+ ls <- liftIO $ catchDefaultIO [] $
+ map decodeBS . fileLines' <$> F.readFile' (toOsPath lf)
+ liftIO $ writeFile (fromRawFilePath lf) $ unlines $
filter (\l -> l `notElem` stdattr && not (null l)) ls
unsetConfig (ConfigKey "filter.annex.smudge")
unsetConfig (ConfigKey "filter.annex.clean")
import Utility.Tmp
import qualified Utility.FileIO as F
-import qualified Data.ByteString as S
-import qualified Data.ByteString.Char8 as S8
import qualified Data.ByteString.Lazy as L
import qualified Data.ByteString.Lazy.Char8 as L8
-- done if writing the file fails.
createAnnexDirectory (parentDir f)
a
-
--- On windows, readFile does NewlineMode translation,
--- stripping CR before LF. When converting to ByteString,
--- use this to emulate that.
-fileLines :: L.ByteString -> [L.ByteString]
-#ifdef mingw32_HOST_OS
-fileLines = map stripCR . L8.lines
- where
- stripCR b = case L8.unsnoc b of
- Nothing -> b
- Just (b', e)
- | e == '\r' -> b'
- | otherwise -> b
-#else
-fileLines = L8.lines
-#endif
-
-fileLines' :: S.ByteString -> [S.ByteString]
-#ifdef mingw32_HOST_OS
-fileLines' = map stripCR . S8.lines
- where
- stripCR b = case S8.unsnoc b of
- Nothing -> b
- Just (b', e)
- | e == '\r' -> b'
- | otherwise -> b
-#else
-fileLines' = S8.lines
-#endif
import Git.FilePath
import Config
import qualified Utility.RawFilePath as R
+import qualified Utility.FileIO as F
import qualified System.FilePath.ByteString as P
import System.PosixCompat.Files (isSymbolicLink)
-- checked into the repository.
updateSmudgeFilter :: Annex ()
updateSmudgeFilter = do
- lf <- fromRawFilePath <$> Annex.fromRepo Git.attributesLocal
- ls <- liftIO $ lines <$> catchDefaultIO "" (readFileStrict lf)
+ lf <- Annex.fromRepo Git.attributesLocal
+ ls <- liftIO $ map decodeBS . fileLines'
+ <$> catchDefaultIO "" (F.readFile' (toOsPath lf))
let ls' = removedotfilter ls
when (ls /= ls') $
- liftIO $ writeFile lf (unlines ls')
+ liftIO $ writeFile (fromRawFilePath lf) (unlines ls')
where
removedotfilter ("* filter=annex":".* !filter":rest) =
"* filter=annex" : removedotfilter rest
- License: BSD-2-clause
-}
+{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-tabs #-}
module Utility.Misc (
separateEnd',
firstLine,
firstLine',
+ fileLines,
+ fileLines',
segment,
segmentDelim,
massReplace,
import System.Exit
import Control.Applicative
import qualified Data.ByteString as S
+import qualified Data.ByteString.Char8 as S8
+import qualified Data.ByteString.Lazy as L
+import qualified Data.ByteString.Lazy.Char8 as L8
import Prelude
{- A version of hgetContents that is not lazy. Ensures file is
where
nl = fromIntegral (ord '\n')
+-- On windows, readFile does NewlineMode translation,
+-- stripping CR before LF. When converting to ByteString,
+-- use this to emulate that.
+fileLines :: L.ByteString -> [L.ByteString]
+#ifdef mingw32_HOST_OS
+fileLines = map stripCR . L8.lines
+ where
+ stripCR b = case L8.unsnoc b of
+ Nothing -> b
+ Just (b', e)
+ | e == '\r' -> b'
+ | otherwise -> b
+#else
+fileLines = L8.lines
+#endif
+
+fileLines' :: S.ByteString -> [S.ByteString]
+#ifdef mingw32_HOST_OS
+fileLines' = map stripCR . S8.lines
+ where
+ stripCR b = case S8.unsnoc b of
+ Nothing -> b
+ Just (b', e)
+ | e == '\r' -> b'
+ | otherwise -> b
+#else
+fileLines' = S8.lines
+#endif
+
{- Splits a list into segments that are delimited by items matching
- a predicate. (The delimiters are not included in the segments.)
- Segments may be empty. -}